[INFO] fetching crate bash-builtins 0.4.1...
[INFO] fixing bash-builtins-0.4.1 against try#622891a4e29178280638a6b63a8908bde2c0c854+cargoflags=-Zfix-edition=end=2015,2024 for pr-157817-2
[INFO] extracting crate bash-builtins 0.4.1 into /workspace/builds/worker-1-tc2/source
[INFO] started tweaking crates.io crate bash-builtins 0.4.1
[INFO] removed 0 missing examples
[INFO] finished tweaking crates.io crate bash-builtins 0.4.1
[INFO] tweaked toml for crates.io crate bash-builtins 0.4.1 written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate bash-builtins 0.4.1 on toolchain 622891a4e29178280638a6b63a8908bde2c0c854
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate bash-builtins 0.4.1 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/source:/opt/rustwide/workdir:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3a6becf2bc8dde7f3fa57ede90e4f284e72d296796fc446bbb1e2c7cc0530151" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] e79e21e431ad66710d600fdfb45a6a8baa831a44c0e176a6a9d236773c62598f
[INFO] running `Command { std: "docker" "start" "e79e21e431ad66710d600fdfb45a6a8baa831a44c0e176a6a9d236773c62598f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "e79e21e431ad66710d600fdfb45a6a8baa831a44c0e176a6a9d236773c62598f" "/opt/rustwide/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "e79e21e431ad66710d600fdfb45a6a8baa831a44c0e176a6a9d236773c62598f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=" "-e" "RUSTDOCFLAGS=" "-w" "/opt/rustwide/workdir" "--user" "0:0" "e79e21e431ad66710d600fdfb45a6a8baa831a44c0e176a6a9d236773c62598f" "/opt/rustwide/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "fix" "--allow-no-vcs" "--allow-dirty" "--frozen" "--all" "--all-targets" "--message-format=json" "-Zfix-edition=end=2015,2024", kill_on_drop: false }`
[INFO] [stderr] crater-edition-check: migrating to next edition
[INFO] [stderr]    Migrating Cargo.toml from 2018 edition to 2021
[INFO] [stderr]    Compiling proc-macro2 v1.0.28
[INFO] [stderr]    Compiling syn v1.0.74
[INFO] [stderr]    Compiling serde_derive v1.0.127
[INFO] [stderr]    Compiling serde v1.0.127
[INFO] [stderr]    Compiling ryu v1.0.5
[INFO] [stderr]    Compiling serde_json v1.0.66
[INFO] [stderr]    Compiling libc v0.2.101
[INFO] [stderr]    Compiling trybuild v1.0.43
[INFO] [stderr]     Checking itoa v0.4.7
[INFO] [stderr]     Checking glob v0.3.0
[INFO] [stderr]     Checking termcolor v1.1.2
[INFO] [stderr]     Checking assert_matches v1.5.0
[INFO] [stderr]    Compiling quote v1.0.9
[INFO] [stderr]    Compiling bash_builtins_macro v0.2.0
[INFO] [stderr]     Checking bash-builtins v0.4.1 (/opt/rustwide/workdir)
[INFO] [stderr]    Migrating src/lib.rs from 2018 edition to 2021
[INFO] [stderr]     Checking toml v0.5.8
[INFO] [stderr]    Migrating examples/varcounter.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating examples/counter.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating examples/upcase.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating examples/unload.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating examples/loadfail.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating tests/options_derive_macro.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating tests/examples.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating examples/nonrequiredargs.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating examples/usevars.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating examples/canpanic.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating examples/filesize.rs from 2018 edition to 2021
[INFO] [stderr]    Migrating tests/ui.rs from 2018 edition to 2021
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 16.52s
[INFO] [stderr] crater-edition-check: bash-builtins v0.4.1 (/opt/rustwide/workdir) updating edition from 2018 to 2021
[INFO] [stderr]     Checking bash-builtins v0.4.1 (/opt/rustwide/workdir)
[INFO] [stdout] warning: field `nentries` is never read
[INFO] [stdout]    --> src/ffi.rs:118:13
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub struct HashTable {
[INFO] [stdout]     |                --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 118 |         pub nentries: c_int,
[INFO] [stdout]     |             ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/variables/assoc.rs:87:37
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub(super) unsafe fn new(table: &ffi::HashTable) -> AssocItemsIterator {
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |                                     |
[INFO] [stdout]    |                                     the lifetime is elided here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]    = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub(super) unsafe fn new(table: &ffi::HashTable) -> AssocItemsIterator<'_> {
[INFO] [stdout]    |                                                                           ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> src/variables/dynvars.rs:165:22
[INFO] [stdout]     |
[INFO] [stdout] 165 |     match unsafe { (*STATE.as_ptr()).lock() } {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] help: this type already provides "interior mutability", so its binding doesn't need to be declared as mutable
[INFO] [stdout]     |
[INFO] [stdout] 156 -     static mut STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout] 156 +     static STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/variables/dynvars.rs:181:40
[INFO] [stdout]     |
[INFO] [stdout] 181 |             if !shell_var.is_null() && (*shell_var).dynamic_value == read_var {
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] help: refactor your code, or use `std::ptr::fn_addr_eq` to suppress the lint
[INFO] [stdout]     |
[INFO] [stdout] 181 -             if !shell_var.is_null() && (*shell_var).dynamic_value == read_var {
[INFO] [stdout] 181 +             if !shell_var.is_null() && std::ptr::fn_addr_eq((*shell_var).dynamic_value, read_var as unsafe extern "C" fn(*mut ShellVar) -> *const ShellVar) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `nentries` is never read
[INFO] [stdout]    --> src/ffi.rs:118:13
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub struct HashTable {
[INFO] [stdout]     |                --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 118 |         pub nentries: c_int,
[INFO] [stdout]     |             ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/variables/assoc.rs:87:37
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub(super) unsafe fn new(table: &ffi::HashTable) -> AssocItemsIterator {
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |                                     |
[INFO] [stdout]    |                                     the lifetime is elided here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]    = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub(super) unsafe fn new(table: &ffi::HashTable) -> AssocItemsIterator<'_> {
[INFO] [stdout]    |                                                                           ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> src/variables/dynvars.rs:165:22
[INFO] [stdout]     |
[INFO] [stdout] 165 |     match unsafe { (*STATE.as_ptr()).lock() } {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] help: this type already provides "interior mutability", so its binding doesn't need to be declared as mutable
[INFO] [stdout]     |
[INFO] [stdout] 156 -     static mut STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout] 156 +     static STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/variables/dynvars.rs:181:40
[INFO] [stdout]     |
[INFO] [stdout] 181 |             if !shell_var.is_null() && (*shell_var).dynamic_value == read_var {
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] help: refactor your code, or use `std::ptr::fn_addr_eq` to suppress the lint
[INFO] [stdout]     |
[INFO] [stdout] 181 -             if !shell_var.is_null() && (*shell_var).dynamic_value == read_var {
[INFO] [stdout] 181 +             if !shell_var.is_null() && std::ptr::fn_addr_eq((*shell_var).dynamic_value, read_var as unsafe extern "C" fn(*mut ShellVar) -> *const ShellVar) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> tests/options_derive_macro.rs:16:11
[INFO] [stdout]    |
[INFO] [stdout] 16 |         B(i64),
[INFO] [stdout]    |         - ^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Opt` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 16 -         B(i64),
[INFO] [stdout] 16 +         B(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> tests/options_derive_macro.rs:22:11
[INFO] [stdout]    |
[INFO] [stdout] 22 |         D(&'a std::path::Path),
[INFO] [stdout]    |         - ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Opt` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 22 -         D(&'a std::path::Path),
[INFO] [stdout] 22 +         D(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> tests/options_derive_macro.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 |         E(String),
[INFO] [stdout]    |         - ^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Opt` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 25 -         E(String),
[INFO] [stdout] 25 +         E(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> tests/options_derive_macro.rs:31:11
[INFO] [stdout]    |
[INFO] [stdout] 31 |         G(std::path::PathBuf),
[INFO] [stdout]    |         - ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Opt` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 31 -         G(std::path::PathBuf),
[INFO] [stdout] 31 +         G(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> examples/nonrequiredargs.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 11 |     Foo(Option<u64>),
[INFO] [stdout]    |     --- ^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Opt` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 11 -     Foo(Option<u64>),
[INFO] [stdout] 11 +     Foo(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> examples/nonrequiredargs.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 |     Bar(Option<&'a str>),
[INFO] [stdout]    |     --- ^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Opt` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 14 -     Bar(Option<&'a str>),
[INFO] [stdout] 14 +     Bar(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 17.35s
[INFO] [stderr] crater-edition-check: migrating to next edition
[INFO] [stderr]    Migrating Cargo.toml from 2018 edition to 2021
[INFO] [stderr]     Checking bash-builtins v0.4.1 (/opt/rustwide/workdir)
[INFO] [stderr]    Migrating src/lib.rs from 2021 edition to 2024
[INFO] [stderr]        Fixed src/variables/arrays.rs (3 fixes)
[INFO] [stderr]        Fixed src/variables/mod.rs (7 fixes)
[INFO] [stderr]        Fixed src/args.rs (1 fix)
[INFO] [stderr]        Fixed src/ffi.rs (2 fixes)
[INFO] [stderr]        Fixed src/variables/dynvars.rs (2 fixes)
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> src/variables/dynvars.rs:165:22
[INFO] [stdout]     |
[INFO] [stdout] 165 |     match unsafe { (*STATE.as_ptr()).lock() } {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `--force-warn static-mut-refs` implied by `--force-warn rust-2024-compatibility`
[INFO] [stdout] help: this type already provides "interior mutability", so its binding doesn't need to be declared as mutable
[INFO] [stdout]     |
[INFO] [stdout] 156 -     static mut STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout] 156 +     static STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> src/variables/dynvars.rs:165:22
[INFO] [stdout]     |
[INFO] [stdout] 165 |     match unsafe { (*STATE.as_ptr()).lock() } {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `--force-warn static-mut-refs` implied by `--force-warn rust-2024-compatibility`
[INFO] [stdout] help: this type already provides "interior mutability", so its binding doesn't need to be declared as mutable
[INFO] [stdout]     |
[INFO] [stdout] 156 -     static mut STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout] 156 +     static STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]        Fixed src/ffi.rs (9 fixes)
[INFO] [stderr]    Migrating examples/filesize.rs from 2021 edition to 2024
[INFO] [stderr]    Migrating examples/varcounter.rs from 2021 edition to 2024
[INFO] [stderr]    Migrating tests/examples.rs from 2021 edition to 2024
[INFO] [stderr]        Fixed tests/examples.rs (2 fixes)
[INFO] [stderr]    Migrating examples/loadfail.rs from 2021 edition to 2024
[INFO] [stderr]    Migrating examples/upcase.rs from 2021 edition to 2024
[INFO] [stderr]    Migrating examples/counter.rs from 2021 edition to 2024
[INFO] [stderr]    Migrating examples/usevars.rs from 2021 edition to 2024
[INFO] [stderr]    Migrating tests/ui.rs from 2021 edition to 2024
[INFO] [stderr]    Migrating tests/options_derive_macro.rs from 2021 edition to 2024
[INFO] [stderr]        Fixed tests/options_derive_macro.rs (7 fixes)
[INFO] [stderr]    Migrating examples/canpanic.rs from 2021 edition to 2024
[INFO] [stderr]    Migrating examples/nonrequiredargs.rs from 2021 edition to 2024
[INFO] [stderr]    Migrating examples/unload.rs from 2021 edition to 2024
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 20.06s
[INFO] [stderr] crater-edition-check: bash-builtins v0.4.1 (/opt/rustwide/workdir) updating edition from 2021 to 2024
[INFO] [stderr]     Checking bash-builtins v0.4.1 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]   --> src/variables/arrays.rs:81:32
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub(crate) unsafe fn array_items(shell_var: *const ffi::ShellVar) -> Vec<(i64, CString)> { unsafe {
[INFO] [stdout]    |                                                                                            ------ because it's nested under this `unsafe` block
[INFO] [stdout] 81 |     let array: ffi::ArrayPtr = unsafe { (*shell_var).value.cast() };
[INFO] [stdout]    |                                ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `nentries` is never read
[INFO] [stdout]    --> src/ffi.rs:118:13
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub struct HashTable {
[INFO] [stdout]     |                --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 118 |         pub nentries: c_int,
[INFO] [stdout]     |             ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/variables/assoc.rs:87:37
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub(super) unsafe fn new(table: &ffi::HashTable) -> AssocItemsIterator {
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |                                     |
[INFO] [stdout]    |                                     the lifetime is elided here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]    = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub(super) unsafe fn new(table: &ffi::HashTable) -> AssocItemsIterator<'_> {
[INFO] [stdout]    |                                                                           ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: creating a shared reference to mutable static
[INFO] [stdout]    --> src/variables/dynvars.rs:165:22
[INFO] [stdout]     |
[INFO] [stdout] 165 |     match unsafe { (*STATE.as_ptr()).lock() } {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[deny(static_mut_refs)]` (part of `#[deny(rust_2024_compatibility)]`) on by default
[INFO] [stdout] help: this type already provides "interior mutability", so its binding doesn't need to be declared as mutable
[INFO] [stdout]     |
[INFO] [stdout] 156 -     static mut STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout] 156 +     static STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/variables/dynvars.rs:181:40
[INFO] [stdout]     |
[INFO] [stdout] 181 |             if !shell_var.is_null() && (*shell_var).dynamic_value == read_var {
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] help: refactor your code, or use `std::ptr::fn_addr_eq` to suppress the lint
[INFO] [stdout]     |
[INFO] [stdout] 181 -             if !shell_var.is_null() && (*shell_var).dynamic_value == read_var {
[INFO] [stdout] 181 +             if !shell_var.is_null() && std::ptr::fn_addr_eq((*shell_var).dynamic_value, read_var as unsafe extern "C" fn(*mut ShellVar) -> *const ShellVar) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `bash-builtins` (lib) due to 1 previous error; 4 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]   --> src/variables/arrays.rs:81:32
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub(crate) unsafe fn array_items(shell_var: *const ffi::ShellVar) -> Vec<(i64, CString)> { unsafe {
[INFO] [stdout]    |                                                                                            ------ because it's nested under this `unsafe` block
[INFO] [stdout] 81 |     let array: ffi::ArrayPtr = unsafe { (*shell_var).value.cast() };
[INFO] [stdout]    |                                ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `nentries` is never read
[INFO] [stdout]    --> src/ffi.rs:118:13
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub struct HashTable {
[INFO] [stdout]     |                --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 118 |         pub nentries: c_int,
[INFO] [stdout]     |             ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/variables/assoc.rs:87:37
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub(super) unsafe fn new(table: &ffi::HashTable) -> AssocItemsIterator {
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |                                     |
[INFO] [stdout]    |                                     the lifetime is elided here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]    = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub(super) unsafe fn new(table: &ffi::HashTable) -> AssocItemsIterator<'_> {
[INFO] [stdout]    |                                                                           ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: creating a shared reference to mutable static
[INFO] [stdout]    --> src/variables/dynvars.rs:165:22
[INFO] [stdout]     |
[INFO] [stdout] 165 |     match unsafe { (*STATE.as_ptr()).lock() } {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[deny(static_mut_refs)]` (part of `#[deny(rust_2024_compatibility)]`) on by default
[INFO] [stdout] help: this type already provides "interior mutability", so its binding doesn't need to be declared as mutable
[INFO] [stdout]     |
[INFO] [stdout] 156 -     static mut STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout] 156 +     static STATE: MaybeUninit<Mutex<State>> = MaybeUninit::uninit();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/variables/dynvars.rs:181:40
[INFO] [stdout]     |
[INFO] [stdout] 181 |             if !shell_var.is_null() && (*shell_var).dynamic_value == read_var {
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] help: refactor your code, or use `std::ptr::fn_addr_eq` to suppress the lint
[INFO] [stdout]     |
[INFO] [stdout] 181 -             if !shell_var.is_null() && (*shell_var).dynamic_value == read_var {
[INFO] [stdout] 181 +             if !shell_var.is_null() && std::ptr::fn_addr_eq((*shell_var).dynamic_value, read_var as unsafe extern "C" fn(*mut ShellVar) -> *const ShellVar) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `bash-builtins` (lib test) due to 1 previous error; 4 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "e79e21e431ad66710d600fdfb45a6a8baa831a44c0e176a6a9d236773c62598f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e79e21e431ad66710d600fdfb45a6a8baa831a44c0e176a6a9d236773c62598f", kill_on_drop: false }`
[INFO] [stdout] e79e21e431ad66710d600fdfb45a6a8baa831a44c0e176a6a9d236773c62598f
